using System;
using System.Collections.Generic;
using FluentDBC.DomainModel;

namespace FluentDBC
{
    public interface IFluentDBCConfiguration
    {
        IFieldContract<TModel> WithClass<TModel>();

        ISet<Class> ClassContracts { get; set; }

        void ValidateContractForClass(dynamic obj);

        void RegisterContractAction(IDictionary<string, Type> contractActions);

        void RegisterContractAction(string key, Type value, bool isOverride);

        void ClearAllContractActions();

        Type GetContractAction(string key);
    }
}